﻿
function users_bw( block_id ) {
    this.vdiv = block_id;
    this.is = false;
}

users_bw.prototype.show = function() 
{ 
    var a = this;
    if( !a.is ) { a.create(); a.is = true; } 
    else $('#gbox_'+a.vdiv).show();
};

users_bw.prototype.hide = function() 
{ 
    $('#gbox_'+this.vdiv).hide(); 
};
    
users_bw.prototype.create = function() 
{
var timerID;
var vdiv = this.vdiv;
var pager = $('#'+vdiv+'Pager');
var edit_in_process = 0;
var reverse = false;
var benable = { add:true, edit:false, del:false, apply:false };
var gritab;
var col_order = [0,1,2,3,4];
var col_names = ['ID','E-Mail адрес отправителя', 'Спам','Комментарий'];
var col_model = [
		{name:'id', index:'rec_id', hidden: false, width:80, editable: false, fixed: true },
		{name:'address', index:'address', hidden: false, width:350, editable: true, 
		 editoptions:{maxlength:"255"},
		 editrules:{custom:true, custom_func:function( address, colname ){
			if( ipdepo.is_mail_pattern( address ) ) return [true,""];
			else return [false, "<p>Неправильно задан шаблон e-mail адреса</p>"];
		 } } },
		{name:'bw', index:'bw', hidden: false, width:50,
         search:true, stype:'select', searchoptions:{value:'999:Все; 0:Нет; 1:Да'},
         editable: true, edittype:'select', editoptions:{ value: '0:Нет; 1:Да'}},
		{name:'comment', index:'comment', hidden: false, width:400, editable: true, editoptions:{maxlength:"255"}, formoptions:{rowpos:3,colpos:1}}
    ];

var jqgo = {
	url:'bw/get.php',
	editurl: 'bw/write.php',
	datatype: 'json',
    postData: {reverse:reverse},
    emptyrecords: true,
	autowidth: false,
	scrollOffset: 22,
	gridview: true,
    hidegrid: false,
	hoverrows: true,
	recordpos: 'right',
	scrollrows: true,
	viewrecords: true,
	multiselect: true,
	multiselectWidth: 40,
	multiboxonly: true,
	mtype: 'GET',
    width: 999,
    shrinkToFit: false,
	colNames: col_names,
	colModel: col_model,
    page: 1,
	pager: pager,
    loadui: 'disable',
	toolbar: [true,'top'],
    filterbar: false,
	height: 555,
	rowNum:25,
	rowList:[24,25,26,100,500],
	sortname: 'rec_id',
	sortorder: 'asc',
	sortable: true,
	caption: 'Список E-Mail адресов отправителей',
    loadError: function() { 
            ipdepo.go('index.php'); 
        },
    loadComplete: function(data) {
            if( !$.isPlainObject(data) ) {
                alert( "Ваша сессия закончилась по таймауту.\nПожалуйста перерегистрируйтесь." );
                ipdepo.go('index.php');
            }
        },
	onPaging: function( pgButton ) { reset_custom_state(); },  
	onSelectAll: function(ids, status) {
		if( status ) {
			if( edit_in_process ) {
				gritab.restoreRow(edit_in_process);
				edit_in_process = 0; 
			}
			set_toolbar_button_state( false, false, true );			
		}
		else {
			set_toolbar_button_state( true, false, false );
		}
	},
	onSelectRow: function(id, status){
		var bnum = gritab.getGridParam('selarrrow').length;
		switch ( bnum ) {
			case 0:
				set_toolbar_button_state( true, false, false );
				break;
			case 1:
				set_toolbar_button_state( false, true, true );
				break;
			default:
				set_toolbar_button_state( false, false, true );
				break;
		}
		
		if( edit_in_process ) {
            if( edit_in_process == id ) return false;
			gritab.restoreRow(edit_in_process);
			edit_in_process = 0;
		}
	},

	ondblClickRow: function(id, irow){
		if( edit_in_process != id ) {
			set_toolbar_button_state( false, false, false );
			gritab.editRow(id, true, 
					function(){ edit_in_process = id; return true; } ,
					function( adata ) {
                        var res = responseOnSubmit(adata, null);
                        if( res[0] )
                            return true;
                        else
                            ipdepo.alert('AlertDlg', 'Ошибка', res[1], 'ipdepo-icon-stop32'); 
                        return false;
					},
					'bw/write.php',
					null,
					edit_process_done,
					edit_process_done,
					edit_process_done
				);
		}
	}
};
// End of jqGrid construct

$.jqm.params.overlay = 1;

// Восстановим настройки
RestTabSetings();

// Создадим jqGrid
gritab = $('#'+vdiv).jqGrid( jqgo );

// Восстановим порядок столбцов
gritab.remapColumns(col_order, true, false );

// Навигатор - обновить
gritab.jqGrid('navGrid', '#'+vdiv+'Pager', {
	add: false, del: false, edit: false, search: false,
//	refreshtext:'Обновить',
	afterRefresh: function() {
			gritab.resetSelection();
			reset_custom_state();
		}
	}
);

// Пользовательский навигатор - выбор столбцов
gritab.jqGrid('navButtonAdd','#'+vdiv+'Pager',{
//    caption: 'Столбцы',
    caption: '',
    title: 'Выбор отображаемых столбцов',
    buttonicon: 'ui-icon-calculator',
    onClickButton: function(){
            gritab.setColumns({
                width: 250,
                modal: true,
                jqModal: true,
                closeOnEscape: true,
                colnameview: false,
                updateAfterCheck: true
            });
    }
});
     
// Пользовательский навигатор - вкл/выкл. тулбар фильтра
gritab.jqGrid('navButtonAdd','#'+vdiv+'Pager',{
//    caption: 'Фильтр',
    caption: '',
    title: 'Включить тулбар фильтра',
    buttonicon: 'ui-icon-search',
    onClickButton: function() { 
        gritab.setGridParam({filterbar:!gritab.getGridParam('filterbar')});
		gritab[0].toggleToolbar();
	}
});
     
// Пользовательский навигатор - вкл/выкл. реверс
gritab.jqGrid('navButtonAdd','#'+vdiv+'Pager',{
//    caption: 'Реверс',
    caption: '',
    title: 'Вкл/Выкл реверсную сортировку',
    buttonicon: 'ui-icon-arrowrefresh-1-n',
    id:vdiv+'_revbutton',
    onClickButton: function() {
        if( edit_in_process ) return false;
        if( reverse ) { reverse = false;
            gritab.setPostDataItem( 'reverse', false );
            $('#'+vdiv+'_revbutton').removeClass('ui-state-focus');
            gritab.trigger("reloadGrid");
        }
        else { reverse = true;
            gritab.setPostDataItem( 'reverse', true );
            $('#'+vdiv+'_revbutton').addClass('ui-state-focus');
            gritab.jqGrid('setGridParam',{sortorder:'desc'});
            gritab.sortGrid('address',true );
        }
        set_toolbar_button_state( true, false, false );
	}
});

$('#'+vdiv+'_revbutton').bind( 'mouseout', function() {
        if( reverse ) $('#'+vdiv+'_revbutton').css({'padding':'0px'});
        else $('#'+vdiv+'_revbutton').css({'padding':'1px'});
}).bind( 'mouseover', function() { $('#'+vdiv+'_revbutton').css({'padding':'0px'}); });

// Пользовательский навигатор - сохранить настройки отобр.таблицы
gritab.jqGrid('navButtonAdd','#'+vdiv+'Pager',{
//    caption: 'Сохранить',
    caption: '',
    title: 'Сохранить настройки таблицы',
    buttonicon: 'ui-icon-disk',
    onClickButton: SaveTabSetings
});

function SaveTabSetings(){
var grp = gritab.getGridParam();
var co = new Array();
var cw = new Array();
var ch = new Array();
var ce = new Array();

for( k=0; k<col_model.length; k++ ) {
    for( i=1; i<grp.colModel.length; i++ ) {
        if( col_model[k].name == grp.colModel[i].name ) {
            co[i-1] = k+1;
            cw[k] = grp.colModel[i].width;
            ch[k] = grp.colModel[i].hidden;
            ce[k] = grp.colModel[i].editable;
            break;
        }
    }
}

var dataset = {
    oper:       "saveset",
    sortname:   grp.sortname,
    sortorder:  grp.sortorder,
    rownum:     grp.rowNum,
    page:       grp.page,
    filterbar:  grp.filterbar,
    colorder:   co,
    colwidth:   cw,
    colhidden:  ch,
    coledit:    ce
};

                          
    $.post('bw/saveset.php', dataset, function( rsp, textStatus)
    {
        if( rsp.errcode ) {
            if( rsp.errcode == '999' ) {
                alert( "Ваша сессия закончилась по таймауту.\nПожалуйста перерегистрируйтесь." );
                ipdepo.go('login.php');
            }
            else
                ipdepo.alert('AlertDlg', 'Ошибка', rsp.errmess, 'ipdepo-icon-stop32');
        }
        else
            ipdepo.alert('AlertDlg', 'Сообщение', rsp.errmess, 'ipdepo-icon-info32');
    }, 'json');
}     

function RestTabSetings(){
var dataset = { oper: "restset" };
    $.ajaxSetup({async: false });
    
    $.post('bw/restset.php', dataset, function( rsp, textStatus)
    {
        $.ajaxSetup({async: true });

        if( rsp.errcode ) {
            return false;
        }

        if( $.isPlainObject(rsp.data) ) {
            if(rsp.data.sortname)
                jqgo.sortname = rsp.data.sortname;
            if(rsp.data.sortorder)
                jqgo.sortorder = rsp.data.sortorder;
            if(rsp.data.rownum)
                jqgo.rowNum = rsp.data.rownum;
            if(rsp.data.page)
                jqgo.page = rsp.data.page;
            if(rsp.data.filterbar)
                jqgo.filterbar = rsp.data.filterbar;
            
            for( i=0; i<rsp.data.colwidth.length; i++ )
                jqgo.colModel[i].width = rsp.data.colwidth[i];
            for( i=0; i<rsp.data.colhidden.length; i++ )
                jqgo.colModel[i].hidden = rsp.data.colhidden[i];
            for( i=0; i<rsp.data.coledit.length; i++ )
                jqgo.colModel[i].editable = rsp.data.coledit[i];
            for( i=0; i<rsp.data.colorder.length; i++ )
                col_order[i+1] = rsp.data.colorder[i];
        }
        rest_done = true;
    }, 'json');
    
}     

// Создадим InlineSearch

gritab.filterToolbar({
	afterSearch:function() { reset_custom_state(); }
});

if( !gritab.getGridParam('filterbar') )
 gritab[0].toggleToolbar();

// ToolBar
var tgritab = $("#t_"+vdiv);

tgritab.height(40);

// Добавим кнопку для "Добавить"
tgritab.append('<div id="'+vdiv+'_add_row" class="ipdepo-toolbar-button">'+
    '<div class="ipdepo-toolbar-img ipdepo-img-add16"></div>Добавить</div>');

$('#'+vdiv+'_add_row')
	.hover(
		function(){ if(benable.add) $(this).css( {'border-color':'#A6C9E2', 'cursor':'pointer'} ); },
		function(){ $(this).css( {'border-color':'transparent', 'cursor':'default'} );}
	)
	.click( function(){
		if( gritab.getGridParam('selarrrow').length == 0 && !edit_in_process ) {
			$('#'+vdiv).jqGrid('editGridRow', "new", {
						modal:true, 
						jqModal:true, 
						url:'bw/add.php', 
						closeOnEscape:true,
                        savekey:[true,13],
                        afterSubmit: responseOnSubmit
			});
		}
	} );

// Добавим кнопку для правки
tgritab.append('<div id="'+vdiv+'_edit_row" class="ipdepo-toolbar-button">'+
    '<div class="ipdepo-toolbar-img ipdepo-img-edit16"></div>Изменить</div>');

$('#'+vdiv+'_edit_row')
	.fadeTo( 'fast', 0.5 )
	.hover(
		function(){ if(benable.edit) $(this).css( {'border-color':'#A6C9E2', 'cursor':'pointer'} ); },
		function(){ $(this).css( {'border-color':'transparent', 'cursor':'default'} );}
	)
	.click( do_row_edit );
	
function do_row_edit() {
		if(gritab.getGridParam('selarrrow').length == 1 && !edit_in_process) {
			gritab.jqGrid('editGridRow', gritab.getGridParam('selrow'), {
						modal:true, 
						jqModal:true, 
						url:'bw/write.php',
						closeOnEscape:true,
                        savekey:[true,13],
                        afterSubmit: responseOnSubmit,
                        onclickPgButtons: function(whichbut,formid,rowid){ gritab.resetSelection(); }
 			});
		}	
}


// Добавим кнопку для удаления
tgritab.append('<div id="'+vdiv+'_delete_row" class="ipdepo-toolbar-button">'+
    '<div class="ipdepo-toolbar-img ipdepo-img-busy16"></div>Удалить</div>');

$('#'+vdiv+'_delete_row')
	.fadeTo( 'fast', 0.5 )
	.hover(
		function(){ if(benable.del) $(this).css( {'border-color':'#A6C9E2', 'cursor':'pointer'} ); },
		function(){ $(this).css( {'border-color':'transparent', 'cursor':'default'} );}
	)
	.click( do_row_del );

function do_row_del() {
		if( benable.del && !edit_in_process) {
			var rowlist = gritab.getGridParam('selarrrow').toString();
			gritab.jqGrid('delGridRow', rowlist, {
						modal:true, 
						jqModal:true, 
						url:'bw/delete.php',
						closeOnEscape:true,
                        afterSubmit: responseOnSubmit,
						afterComplete:function( response, postdata ) {
								set_toolbar_button_state( true, false, false );
								} 
						} 
			);
		}
}

// Утилиты кнопок редактирования.
function responseOnSubmit(response, postdata) {
//    var rsp = JSON.parse(response.responseText);
    var rsp = $.parseJSON(response.responseText);
    var success = true;
    var msg = '';
    
    if(rsp.errcode) {
        success = false;
        msg = rsp.errmess;
        if( rsp.errcode == '999' ) {
            alert( "Ваша сессия закончилась по таймауту.\nПожалуйста перерегистрируйтесь." );
            ipdepo.go('login.php');
        }
    }
    else {
        $('#'+vdiv+'_apply').fadeTo('fast', 1);
        benable.apply = true;
        ipdepo.need_save = true;
    }

    return [success,msg];
}


// Добавим кнопку для экспорта
tgritab.append('<div id="'+vdiv+'_export" class="ipdepo-toolbar-button">'+
    '<div class="ipdepo-toolbar-img ipdepo-img-export16"></div>Экспорт</div>');

$('#'+vdiv+'_export')
	.fadeTo( 'fast', 1 )
	.hover(
		function(){ $(this).css( {'border-color':'#A6C9E2', 'cursor':'pointer'} ); },
		function(){ $(this).css( {'border-color':'transparent', 'cursor':'default'} );}
	)
	.click( do_export );

function do_export() {
    ipdepo.go("bw/export.php");
}


// Добавим кнопку для импорта
tgritab.append('<div id="'+vdiv+'_import" class="ipdepo-toolbar-button">'+
    '<div class="ipdepo-toolbar-img ipdepo-img-import16"></div>Импорт</div>');

$('#'+vdiv+'_import')
	.fadeTo( 'fast', 1 )
	.hover(
		function(){ $(this).css( {'border-color':'#A6C9E2', 'cursor':'pointer'} ); },
		function(){ $(this).css( {'border-color':'transparent', 'cursor':'default'} );}
	)
.click( function() {
    ipdepo.doImport({
        domain:ipdepo.domain+'.'+ipdepo.dom_user,
        dlgID:'DlgImport',
        title: "Импорт списка 'белых' адресов",
        loader:'bw/imload.php',
        callerCB: function( result ){
                    if( result ) {
                        gritab.trigger("reloadGrid");
                        $('#'+vdiv+'_apply').fadeTo('fast', 1);
                        benable.apply = true;                        
                        ipdepo.need_save = true;
                    }
                },
        processor:'bw/improcess.php',
        progress:'bw/improgress.php'
    });
} );


// Добавим кнопку сохранения
tgritab.append('<div id="'+vdiv+'_apply" class="ipdepo-toolbar-button">'+
    '<div class="ipdepo-toolbar-img ipdepo-img-save16"></div>Применить</div>');

$('#'+vdiv+'_apply')
	.fadeTo( 'fast', 0.5 )
	.hover(
		function(){ if(benable.apply) $(this).css( {'border-color':'#A6C9E2', 'cursor':'pointer'} ); },
		function(){ $(this).css( {'border-color':'transparent', 'cursor':'default'} );}
	)
.click( function() {
    if( benable.apply )
        ipdepo.confirm('AlertDlg', 'Требуется подтверждение', 'Сохранить и применить сделанные изменения ?',
                        'ipdepo-icon-quest32', do_save, "" );
    return false;
} );


var do_save = function() {
    $.post('bw/do_save.php', {oper:'savebw'}, function( rsp, textStatus) {
        if( rsp.errcode ) {
            if( rsp.errcode == '999' ) {
                alert( "Ваша сессия закончилась по таймауту.\nПожалуйста перерегистрируйтесь." );
                ipdepo.go('login.php');
            }
            else
                ipdepo.alert('AlertDlg', 'Ошибка', rsp.errmess, 'ipdepo-icon-stop32');
        }
        else {
            $('#'+vdiv+'_apply').fadeTo('fast', 0.5);
            benable.apply = false;
            ipdepo.need_save = false;
        }
    }, 'json');
}


function edit_process_done() { 
	edit_in_process = 0; 
	set_toolbar_button_state( false, true, true );
	return true;
}

function set_toolbar_button_state( add, edit, del ) {
	if( add !== null ) {
		$('#'+vdiv+'_add_row').fadeTo('fast', add ? 1 : 0.5);
		benable.add = add;
	}
	if( edit !== null ) {
		$('#'+vdiv+'_edit_row').fadeTo('fast', edit ? 1 : 0.5);
		benable.edit = edit;
	}
	if( del !== null ) {
		$('#'+vdiv+'_delete_row').fadeTo('fast', del ? 1 : 0.5);
		benable.del = del;
	}
	
}
function reset_custom_state() {
	if( edit_in_process ) {
		gritab.restoreRow(edit_in_process);
		edit_in_process = 0; 
	}
	set_toolbar_button_state( true, false, false );
}
/*
gritab.jqGrid('sortableRows');
gritab.bind( "sortstop", function(event, ui) {
  $.noop();
});
*/
// Добавим ToolTip
$('th#'+vdiv+'_address').attr({ systooltip: 'tooltips.php?ttname=users_bw.address'});
$('th#'+vdiv+'_bw').attr({ systooltip: 'tooltips.php?ttname=users_bw.bw'});
$('th#'+vdiv+'_comment').attr({ systooltip: 'tooltips.php?ttname=users_bw.comment'});
$('div#'+vdiv+'_add_row').attr({ systooltip: 'tooltips.php?ttname=toolbar.add_row'});
$('div#'+vdiv+'_edit_row').attr({ systooltip: 'tooltips.php?ttname=toolbar.edit_row'});
$('div#'+vdiv+'_delete_row').attr({ systooltip: 'tooltips.php?ttname=toolbar.del_row'});
$('div#'+vdiv+'_export').attr({ systooltip: 'tooltips.php?ttname=toolbar.export'});
$('div#'+vdiv+'_import').attr({ systooltip: 'tooltips.php?ttname=toolbar.import'});
$('div#'+vdiv+'_apply').attr({ systooltip: 'tooltips.php?ttname=toolbar.apply'});
$('div#gview_'+vdiv+' [systooltip]').cluetip({ 
        attribute: 'systooltip',
        cluetipClass: 'jtip',
        dropShadow: true,
        waitImage: false,
        positionBy: 'mouse',
        showTitle: false,
        escapeTitle: true,
        ajaxProcess: function(resp) {
            if( resp.errcode == '999' ) {
                alert( resp.errmess );
                ipdepo.go('login.php');
                return '';
            }
            return resp.data;
        },
        ajaxSettings: {
            dataType: 'json'
        },
        onActivate: function(e) {
            return ipdepo.tooltip;
        }
    });

};  // End of create function definition
